package com.canyou.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.canyou.system.entity.role.RoleMenuDTO;
import com.canyou.system.model.Role;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;

/**
 * 角色管理服务类
 *
 * @author canyou
 * @since 2019-05-14
 */
public interface RoleService extends IService<Role> {

    /**
     * 获取角色的分页
     *
     * @param page     分页信息
     * @param roleName 角色名称
     * @return
     */
    IPage<Role> getPageList(IPage<Role> page, String roleName);

    /**
     * 判断角色是否存在
     *
     * @param roleName 角色名
     * @param roleId   角色id
     * @return
     */
    boolean existRole(String roleName, Long roleId);

    /**
     * 根据角色id，保存该角色的所有权限
     *
     * @param roleMenuDTO 角色权限数据
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    boolean saveRoleMenu(RoleMenuDTO roleMenuDTO);

    /**
     * 根据角色Id获取关联用户数
     *
     * @param roleId 角色id
     * @return
     */
    boolean existRoleUser(Long roleId);

    /**
     * 根据角色Id删除角色, 物理删除
     *
     * @param roleId 角色id
     * @return
     */
    boolean removeById(Long roleId);

    /**
     * 根据角色Id获取关联角色
     *
     * @param roleId 角色id
     * @return
     */
    @Transactional(isolation = Isolation.REPEATABLE_READ, rollbackFor = Exception.class)
    boolean removeRoleById(Long roleId);

}
